package br.ucb.servicos;

import java.util.Calendar;

public class Validadores {
	public static boolean validaData(String campo){
		String date[] = campo.split("/");
		Integer data[] = Servicos.parseInteger(date);
		Calendar cal = Calendar.getInstance();
		if(data == null){
			return false;
		}
		int diaMax = isDiaValido(data[1]);
		if(isDataValida(data) == 0)
			diaMax = cal.get(Calendar.DAY_OF_MONTH);
		if( !isIntValido(data[2], 1900, cal.get(Calendar.YEAR)) || !isIntValido(data[1], 1, 12) || !isIntValido(data[0], 1, diaMax)){
			return false;
		}
		if(isDataValida(data) == -1){
			return false;
		}
		return true;       
	}
	public static boolean isIntValido(int valor, int min, int max){
		if((valor < min) || (valor > max))
			return false;
		return true;
	}
	public static int isDataValida(Integer dataEvento[]){
		Calendar cal = Calendar.getInstance();
		int anoAtual = cal.get(Calendar.YEAR);
		int mesAtual = (cal.get(Calendar.MONDAY) + 1);
		int diaAtual = cal.get(Calendar.DAY_OF_MONTH);

		int subAno, subMes, subDia;

		subAno = anoAtual-dataEvento[2]  ;
		if(subAno==0){
			subMes = mesAtual-dataEvento[1];
			if(subMes==0){
				subDia = diaAtual-dataEvento[0];
				if(subDia==0)
					return 0;
				else{
					if(subDia > 0)
						return 1;
					else
						return -1;
				}
			}
			else{
				if(subMes > 0)
					return 1;
				else
					return -1;
			}
		}
		else
		{
			if(subAno > 0)
				return 1;
			else
				return -1;
		}
	}
	public static int isDiaValido(Integer mes){
		switch(mes){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		}
		return 28;
	}

	public static int isDiaValido(Integer mes, Integer ano){
		switch(mes){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		}
		return ((ano % 4 == 0) && (ano % 100 != 0) || (ano % 400 == 0))?29:28;
	}
	public static boolean isCPF(String cpf) {
		String cpfInval[] = {"00000000000","11111111111", "22222222222", "33333333333", "44444444444", "55555555555", 
				"66666666666","77777777777", "88888888888", "99999999999"}; 		
		int cont,aux2,soma=0;
		int []dig = new int [11];
		int [] digVeri = new int[2];

		if(cpf.length() != 11)
			return false;

		for(cont=0;cont<9;cont++){
			if(cpfInval[cont].equals(cpf))
				return false;
		} 


		for(cont=0;cont<cpf.length();cont++)
			dig[cont] = Character.getNumericValue(cpf.charAt(cont));

		// obtem o primeiro digito verificador
		aux2=10;
		for(cont=0;cont<9;cont++,aux2--){
			soma+= dig[cont] * aux2;
		}
		digVeri[0]=soma % 11;
		digVeri[0]= digVeri[0] < 2 ? 0 : 11-digVeri[0];

		soma=0;
		aux2=11;

		for(cont=0;cont<10;cont++,aux2--){
			if(cont==9)
				soma+= digVeri[0] * aux2;
			else
				soma+= dig[cont] * aux2;
		}

		digVeri[1]=soma % 11;
		digVeri[1]= digVeri[1]<2 ? 0 : 11-digVeri[1];
		if(digVeri[0]!=dig[9] || digVeri[1]!=dig[10])
			return false;
		return true;
	}

	public static boolean isNome(String nome) {
		if(nome.trim().isEmpty()){
			return false;
		}
		return true;
	}

	public static boolean isSenha(String senha, String cSenha) {
		if(senha.length()<4 || !senha.equals(cSenha)){
			return false;			
		}
		return true;
	}

}
